/* 
 * File:   ClientSocket.h
 * Author: mauro
 *
 * Created on 25 de septiembre de 2014, 19:51
 */

#ifndef CLIENTSOCKET_H
#define	CLIENTSOCKET_H

#include <cstdlib>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/wait.h>
#include <signal.h>
#include <iostream>
using namespace std;

class ClientSocket {
private:

    struct sockaddr_in serverAddress;
    //descriotor del socket, para la conexion o para la comunicacion.
    int socket;

public:
    ClientSocket();


    //pre: 
    //pos: Crea un socket
    //return: socket creado. -1 en caso de error.
    int initSocket();

    //pre: 
    //pos: conecta el socket cliente (a un puerto e ip, establecido )
    //return: -1 en caso de error.
    int connect(char *ip, int port);

    //-1 en caso de error,
    //numero de bytes enviados o recibidos en caso de exito
    //pre:
    //pos:
    //return:
    int send(void *cad, int length);
    //pre:
    //pos:
    //return:
    int receive(void *cad, int length);


    int sendAll(void* buf, int len);
    int receiveAll(void *buf, int length);
    //Recibe los datos del cliente. Y establece un tiempo de espera.
    //return: -2 timeOut, -1 Error, 0 se cerro la conexion.
    int recvTimeOut(void* buf, int len, int timeOut);


    //pre:
    //pos:
    //return:
    void close();
    virtual ~ClientSocket();


};

#endif	/* CLIENTSOCKET_H */

